const Service = require('../cli-service/lib/Service');
const logInfo = require('../util/logInfo');
const logStep = require('../util/logStep');
const globalConfigPlugin = require('./globalConfigPlugin');

const context = process.cwd();

function resolveEntry(entry) {
    logInfo('判断入口文件是否存在，如果没有传入入口文件则读默认的。')
    // entry = entry || findExisting(context, [
    //     'main.js',
    //     'index.js',
    //     'App.vue',
    //     'app.vue'
    //   ])
    return {
        context,
        entry
    }
}

const creatService = function (context, entry, asLib) {
    logInfo('注入bable和eslint 插件，以及其他基础配置，通过 globalConfigPlugin 模拟一套完整的配置环境')
    return new Service(
        context,
        {
            projectOptions: {
                compiler: true,
                lintOnSave: true
            },
            plugins: [
                globalConfigPlugin(context, entry, asLib)
            ]
        }
    )
}

exports.serve = function (_entry, args) {
    logStep('构建入口信息')
    const { context, entry } = resolveEntry(_entry);
    logStep('创建service，并执行 serve')
    creatService(context, entry).run('serve', args)
}

exports.build = function (_entry, args) {
    logStep('构建入口信息')
    const { context, entry } = resolveEntry(_entry);
    logStep('asLib,是否有目标输出的html文件')
    const asLib = args.target && args.target !== 'app'
    if (asLib) {
        args.entry = entry
    }

    logStep('创建service，并执行 build')
    creatService(context, entry).run('build', args)
}